package Week1;

public class Day6 {
}



class Solution5 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // write code here
        StringBuffer ret = new StringBuffer();
        int i = s.length()-1;
        int j = t.length()-1;
        int tmp = 0;
        //从后往前开始相加
        while(i >= 0 || j >= 0){
            if(i >= 0) tmp += s.charAt(i--) - '0';
            if(j >= 0) tmp += t.charAt(j--) - '0';
            ret.append((char)(tmp % 10 + '0'));
            tmp /= 10;
        }
        if(tmp != 0) ret.append((char)(tmp + '0'));
        return ret.reverse().toString();
    }
}

class Solution6 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param head1 ListNode类
     * @param head2 ListNode类
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        //翻转链表
        head1 = reverse(head1);
        head2 = reverse(head2);
        //创建头节点
        ListNode node = new ListNode(-1);
        ListNode cur = node;
        int tmp = 0;
        //相加
        while(head1 != null || head2 != null || tmp != 0){
            if(head1 != null){
                tmp += head1.val;
                head1 = head1.next;
            }
            if(head2 != null){
                tmp += head2.val;
                head2 = head2.next;
            }
            cur.next = new ListNode(tmp % 10);
            tmp /= 10;
            cur = cur.next;
        }
        //翻转
        return reverse(node.next);
    }

    public ListNode reverse(ListNode head){
        ListNode cur = head.next;
        head.next = null;
        while(cur != null){
            ListNode curN = cur.next;
            cur.next = head;
            head = cur;
            cur = curN;
        }
        return head;
    }
}

class Solution7 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // write code here
        StringBuffer ret = new StringBuffer();
        //翻转后转为为字符数组
        char[] ss = new StringBuffer(s).reverse().toString().toCharArray();
        char[] tt = new StringBuffer(t).reverse().toString().toCharArray();
        int m = s.length() , n = t.length();
        int[] arr = new int[m+n];
        //每个位置相乘，并放到对应位置
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                arr[i + j] += (ss[i] - '0') * (tt[j] - '0');
            }
        }

        //相加
        int tmp = 0;
        for(int i = 0; i < m+n; i++){
            tmp += arr[i];
            ret.append((char)(tmp % 10 + '0'));
            tmp /= 10;
        }

        while(tmp != 0){
            ret.append((char)(tmp % 10 + '0'));
            tmp /= 10;
        }

        //防止前导0
        while(ret.length() > 1 && ret.charAt(ret.length()-1) == '0'){
            ret.deleteCharAt(ret.length()-1);
        }
        return ret.reverse().toString();

    }
}